\documentclass{article}

\usepackage{pgfplots}
\usepackage{pgfplotstable}

\pgfplotsset{compat=1.12}

\pgfplotstableread{
Year    Cat1  Cat2    Cat3   Cat4
2005    10     50      -10     30  
2006    -40     60      -15     90
2007    -20     60      -15     60
}\mytable

\begin{document}%

  % First try: use negative and positive values in the same axis environment - FAIL
  \begin{tikzpicture}
%  \tracingmacros=2 \tracingcommands=2
    \begin{axis}[
      %xbar stacked,
	  stack plots=x,/tikz/xbar,
	  area legend,
		xmajorgrids,
		stack negative=separate,
	  %disabledatascaling,
	  legend pos=outer north east,
	  enlarge y limits=0.3,
      ]
      \addplot table [x index=1,y expr=\coordindex] {\mytable};
      \addplot+[yshift=5pt]table [x index=2,y expr=\coordindex] {\mytable};
      \addplot+[yshift=10pt] table [x index=3,y expr=\coordindex] {\mytable};
      \addplot+[yshift=15pt] table [x index=4,y expr=\coordindex] {\mytable};
      \legend{Cat1,Cat2,Cat3,Cat4}
    \end{axis}
  \end{tikzpicture}

  \begin{tikzpicture}
%  \tracingmacros=2 \tracingcommands=2
    \begin{axis}[
      %xbar stacked,
	  stack plots=x,/tikz/xbar,
	  area legend,
		xmajorgrids,
		stack negative=on previous,
	  %disabledatascaling,
	  legend pos=outer north east,
	  enlarge y limits=0.3,
      ]
      \addplot table [x index=1,y expr=\coordindex] {\mytable};
      \addplot+[yshift=5pt]table [x index=2,y expr=\coordindex] {\mytable};
      \addplot+[yshift=10pt] table [x index=3,y expr=\coordindex] {\mytable};
      \addplot+[yshift=15pt] table [x index=4,y expr=\coordindex] {\mytable};
      \legend{Cat1,Cat2,Cat3,Cat4}
    \end{axis}
  \end{tikzpicture}

\end{document}
